View Javadoc
1   package edu.jiangxin.apktoolbox.swing.treetable;
2   
3   import javax.swing.JTree;
4   import javax.swing.event.TreeExpansionEvent;
5   import javax.swing.event.TreeExpansionListener;
6   import javax.swing.table.AbstractTableModel;
7   import javax.swing.tree.TreePath;
8   import java.io.Serial;
9   
10  public class MyTreeTableModelAdapter extends AbstractTableModel {
11      @Serial
12      private static final long serialVersionUID = 1L;
13  
14      JTree tree;
15      transient MyAbstractTreeTableModel treeTableModel;
16  
17      public MyTreeTableModelAdapter(MyAbstractTreeTableModel treeTableModel, JTree tree) {
18          this.tree = tree;
19          this.treeTableModel = treeTableModel;
20  
21          tree.addTreeExpansionListener(new TreeExpansionListener() {
22              public void treeExpanded(TreeExpansionEvent event) {
23                  fireTableDataChanged();
24              }
25  
26              public void treeCollapsed(TreeExpansionEvent event) {
27                  fireTableDataChanged();
28              }
29          });
30      }
31  
32  
33  
34      public int getColumnCount() {
35          return treeTableModel.getColumnCount();
36      }
37  
38      public String getColumnName(int column) {
39          return treeTableModel.getColumnName(column);
40      }
41  
42      public Class<?> getColumnClass(int column) {
43          return treeTableModel.getColumnClass(column);
44      }
45  
46      public int getRowCount() {
47          return tree.getRowCount();
48      }
49  
50      protected Object nodeForRow(int row) {
51          TreePath treePath = tree.getPathForRow(row);
52          return treePath.getLastPathComponent();
53      }
54  
55      public Object getValueAt(int row, int column) {
56          return treeTableModel.getValueAt(nodeForRow(row), column);
57      }
58  
59      public boolean isCellEditable(int row, int column) {
60          return treeTableModel.isCellEditable(nodeForRow(row), column);
61      }
62  
63      public void setValueAt(Object value, int row, int column) {
64          treeTableModel.setValueAt(value, nodeForRow(row), column);
65      }
66  }